package vip

import (
	"context"

	"github.com/gogf/gf/v2/frame/g"

	"github.com/beherochuling/beesoft_api/app/dao"
	"github.com/beherochuling/beesoft_api/app/model/entity"
	model "github.com/beherochuling/beesoft_api/app/model/vip"
)

var Vip = vip{}

type vip struct{}

func (v *vip) List(ctx context.Context, req *model.VipListRequest) ([]entity.VipVips, int) {
	var items []entity.VipVips

	where := g.Map{}

	m := dao.VipVips.Ctx(ctx).
		Where(where)

	count, err := m.Count()
	if err != nil {
		panic(err)
	}

	if count > 0 {
		err := m.Offset((req.Page - 1) * req.PerPage).
			Limit(req.PerPage).
			OrderDesc(dao.VipVips.Columns().Id).
			Scan(&items)
		if err != nil {
			panic(err)
		}
	}

	return items, count
}
func (v *vip) Show(ctx context.Context, id uint) *entity.VipVips {
	var item *entity.VipVips

	// where := g.Map{}

	err := dao.VipVips.Ctx(ctx).
		// Where(where).
		Where(dao.VipVips.Columns().Id, id).
		Scan(&item)
	if err != nil {
		panic(err)
	}

	return item
}
func (v *vip) Store(ctx context.Context, req *model.VipStoreRequest) error {
	_, err := dao.VipVips.Ctx(ctx).
		Insert(entity.VipVips{
			Type: req.Type,
		})
	if err != nil {
		panic(err)
	}

	return err
}
func (v *vip) UpdateById(ctx context.Context, id uint, data *model.VipUpdateRequest) error { // data *g.Map
	// where := g.Map{}

	_, err := dao.VipVips.Ctx(ctx).
		// Where(where).
		Where(dao.VipVips.Columns().Id, id).
		Update(data)
	if err != nil {
		panic(err)
	}

	return err
}
func (v *vip) DestroyById(ctx context.Context, id uint) error {
	// where := g.Map{}

	_, err := dao.VipVips.Ctx(ctx).
		// Where(where).
		Where(dao.VipVips.Columns().Id, id).
		Delete()
	if err != nil {
		panic(err)
	}

	return err
}
